//UTF-8 encoded
/* "qDroid v.2009.04.27 pre-alfa-2"
 * t_settings.h
 *
 *  Created on: 2011.05.15
 *      Author: Denjs
 *
 *
 * замените "t_settings" на имя вашего класса здесь,
 * исходнике класса t_settings.cpp,
 * исходнике функций библиотек в libqtsofarm.cpp
 * и переименуйте файлы данного класса соответвующим образом.
 * Не забудьте про "t_settings_H_"
 *
 * Далее, можно наследовать t_settings не от QObject,
 * а от стороннего класса, который вы хотите использовать в QtScript.
 * и переписать критичные функции описанные в данном демо-классе.
 *
 * Не забудьте, что только "слотовые" функции могут быть вызваны из скрипта.
 *
 */

#ifndef t_settings_H_
#define t_settings_H_

#include <QtCore>
#include <QtScript>

class t_settings :public QSettings
{
    Q_OBJECT

public:
        t_settings(const QString & fileName);
        virtual ~t_settings();

    	//это (ниже) нужно что бы можно было засунуть класс в контейнер QList
    	// возможно так-же связано с работой QtScript движка - см функции
		// после определения класса
		//
    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 1 из 8
        t_settings(const t_settings &other);

    	//это (ниже) нужно что бы можно было засунуть t_FileList в контейнер QList
    	// возможно так-же связано с работой QtScript движка - см функции
    	// после определения класса
    	//
    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 2 из 8
        t_settings& operator=(const t_settings &other);


    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 2.2 из 8
                bool operator==(const t_settings &other ) const;


public slots:
	QString GetId();

        QStringList	allKeys () const {return QSettings::allKeys();};
        QString	applicationName () const {return QSettings::applicationName();};
        void	beginGroup ( const QString & prefix ) {return QSettings::beginGroup(prefix);};
        int	beginReadArray ( const QString & prefix ) {return QSettings::beginReadArray(prefix);};
        void	beginWriteArray ( const QString & prefix, int size = -1 )  {return QSettings::beginWriteArray(prefix, size);};
        QStringList	childGroups () const {return QSettings::childGroups();};
        QStringList	childKeys () const {return QSettings::childKeys();};
        void	clear () {return QSettings::clear();};
        bool	contains ( const QString & key ) const {return QSettings::contains(key);};
        void	endArray () {return QSettings::endArray();};
        void	endGroup () {return QSettings::endGroup();};
        bool	fallbacksEnabled () const {return QSettings::fallbacksEnabled();};
        QString	fileName () const   {return QSettings::fileName();};
//??        Format	format () const       {return QSettings::format();};
        QString	group () const       {return QSettings::group();};
//??        QTextCodec *	iniCodec () const  {return QSettings::iniCodec();};
        bool	isWritable () const {return QSettings::isWritable();};
        QString	organizationName () const {return QSettings::organizationName();};
        void	remove ( const QString & key )  {return QSettings::remove(key);};
        Scope	scope () const                  {return QSettings::scope();};
        void	setArrayIndex ( int i )         {return QSettings::setArrayIndex(i);};
        void	setFallbacksEnabled ( bool b )  {return QSettings::setFallbacksEnabled(b);};
//??        void	setIniCodec ( QTextCodec * codec )  {return QSettings::setIniCodec(codec);};
        //void	setIniCodec ( const char * codecName )  {return QSettings::setIniCodec(codecName);};
          void	setIniCodec ( QString codecName )  {return QSettings::setIniCodec(codecName.toLatin1());};
        void	setValue ( const QString & key, const QVariant & value ) {return QSettings::setValue(key, value);};
/*?*/   Status	status () const {return QSettings::status();};
        void	sync () {return QSettings::sync();};
        QVariant value ( const QString & key, const QVariant & defaultValue = QVariant() ) const
                { return QSettings::value(key, defaultValue); };

};

//----------------------------------------------------------------------
//нужно чтобы можно было передавать эти элементы как параметры в функции внутри QtScript
// спец. настройки для QtScript (v 2008.11.25)
// Шаг 3 из 8
Q_DECLARE_METATYPE(t_settings*);

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 4 из 8
static QScriptValue f_qdroid_t_settings_toScriptValue(QScriptEngine *engine, t_settings* const &in)
{ return engine->newQObject(in); }

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 5 из 8
static void f_qdroid_t_settings_fromScriptValue(const QScriptValue &object, t_settings* &out)
{ out = qobject_cast<t_settings*>(object.toQObject()); }

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 6 из 8
//конструктор для последующего его определения как new в скрипте
static QScriptValue f_qdroid_t_settings_constructor(QScriptContext *QSContext, QScriptEngine *QSEngine)
	{
		//t_BaseBot BaseBot;
		QScriptValue QtSObject;
                QString fileName="";
                if (QSContext->argumentCount()>0) fileName.append(QSContext->argument(0).toString());

                QtSObject=QSEngine->newQObject(new t_settings(fileName)); //
		return QtSObject;
	}

// шаги 7 и 8 должны быть выполнены в программе которая собирается использовать данный класс совместно со скриптовым движком
//// спец. настройки для QtScript (v 2008.11.25)
//// Шаг 7 из 8
//// - это qScriptRegisterMetaType регистрация но это нужно сделать в головном классе
//// например в глобальной функции "define__qdroid_qtscript_functions()"
////// t_FileList TYPE defenition
//	qScriptRegisterMetaType(_QSEngine, f_qdroid_t_settings_toScriptValue, f_qdroid_t_settings_fromScriptValue);

//// спец. настройки для QtScript (v 2008.11.25)
//// Шаг 8 из 8
////- определение конструктора в контексте скрипта
////// t_FileList NEW constructor defenition
//	QScriptValue fun5_constr = _QSEngine->newFunction(f_qdroid_t_settings_constructor);
//	_QSEngine->globalObject().setProperty("t_settings", fun5_constr);

static int f_qdroid_t_settings_register(QScriptEngine *_QSEngine)
	{
		//шаг 7 регистрация метатипа
                qScriptRegisterMetaType(_QSEngine, f_qdroid_t_settings_toScriptValue, f_qdroid_t_settings_fromScriptValue);
		//шаг 8 регистрация конструктора
                _QSEngine->globalObject().setProperty("Settings", _QSEngine->newFunction(f_qdroid_t_settings_constructor));
		return 0;
	}
//----------------------------------------------------------------------

#endif /* t_settings_H_ */
